package componentes.basicos;

/**
 * Classe que representa um registrador.
 * @author Gustavo Miguel, Cleisson Alves, Evandro Francisco, Lucas.
 */
public class Registrador {
    
    // Atributo da classe que armazena o conteúdo de um registrador.
    private Palavra conteudo;
    private Barramento saida;
    /**
     * Cria um registrador padrão. Um registrador padrão contém em seu conteúdo
     * uma palavra inoperante.
     * @ see Palavra.
     */
    public Registrador() {
        this.conteudo = new Palavra();
    }
    
    /**
     * Cria um registrador e coloca em seu conteúdo uma palavra especificada.
     * @param conteudo Contúdo que será armazenado no registrador.
     */
    public Registrador(Palavra conteudo) {
        this.conteudo = conteudo;
    }
    
    /**
     * Método para retornar o valor do conteúdo do registrador em Decimal.
     * 
     */
    public int getConteudoValorDec() {
        if(getConteudo().getPalavra().charAt(0) == '1') {
            return -Integer.parseInt(ALU.complemento2(getConteudo().getPalavra()),2);
        }
        return Integer.parseInt(getConteudo().getPalavra(), 2);
    }
    
    /**
     * Método para verificar se um registrador está vazio. 
     */
    public boolean estaVazio() {
        if(getConteudo().equals(Constantes.INOPERANTE.getPalavra()))
            return true;
        return false;
    }

    /**
     * Método para retornar a Palavra correspondente ao conteúdo do registrador.
     * @return Palavra contida no registrador.
     */
    public Palavra getConteudo() {
        return conteudo;
    }

    /**
     * Método para configurar o conteúdo de um registrador a partir de uma 
     * palavra especificada.
     * @param conteudo Palavra especificada.
     */
    public void setConteudo(Palavra conteudo) {
        this.conteudo = conteudo;
    }
    
    public Barramento getSaida(){
        return this.saida;
    }
    
} // Fim da classe.
